import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';
import AutoImport from 'unplugin-auto-import/vite';
import Components from 'unplugin-vue-components/vite';
import { VantResolver } from '@vant/auto-import-resolver';
import Icons from 'unplugin-icons/vite';
import IconsResolver from 'unplugin-icons/resolver';
import UnoCSS from 'unocss/vite';
// postcss-px-to-viewport运行提示已弃用,npm下面这个,postcss-px-to-viewport换成postcss-px-to-viewport-8-plugin
// npm install postcss-px-to-viewport-8-plugin -D
import pxtovw from 'postcss-px-to-viewport-8-plugin';
import { resolve } from 'path';
import { analyzer } from 'vite-bundle-analyzer';

// https://vitejs.dev/config/
export default defineConfig(({ mode }) => {
    return {
        //插件数组
        plugins: [
            vue(),
            AutoImport({
                imports: ['vue', 'vue-router', 'pinia'], //可以不用添加这些的导入语法
                dts: true, //自动导入类型文件，生成auto-imports.d.ts，就不会爆红
                resolvers: [VantResolver()],
            }),
            Components({
                dts: true, //是否生成对应的 .d.ts 类型声明文件，默认为 false
                dirs: ['src/components'], //指定要扫描的组件目录，默认为 ['src/components']
                extensions: ['vue'], //指定组件文件扩展名，默认为 ['vue']
                resolvers: [
                    VantResolver(),
                    IconsResolver({
                        prefix: 'i', //前缀默认是 ‘i’,可以改成其他前缀
                        // enabledCollections: ['ep'], //element-plus 的图标库名称是ep，在使用icon图标是不能直接使用，比如<Edit />,需要写成<i-ep-edit />，不指定特殊库，用@iconify/json可以自动引入所有icon,不指定会影响打包大小
                    }),
                ],
            }),
            Icons({
                compiler: 'vue3', // 如果使用Vue3
                autoInstall: true,
            }),
            UnoCSS(),
            mode === 'analyze' ? analyzer() : undefined,
        ],
        /**
         * 在生产环境的基本公共路径。
         * @default '/'
         */
        // base：开发或生产环境服务的公共基础路径
        // 	绝对 URL 路径名，例如 /foo/
        // 	完整的 URL，例如 https://foo.com/
        // 	空字符串或 ./（用于开发环境）
        // 	通过命令指定：vite build --base=/my/public/path/
        // 	代码中获取base：import.meta.env.BASE_URL全局变量在代码中使用，原样出现(例如import.meta.env['BASE_URL']是无效的)（vite.config.js不能用import.meta.env,要loadEnv方法，详情在env环境变量配置介绍）
        base: '/hzDegmWeixin',
        // base: '/',

        // mode：将会把serve和build时的模式都覆盖掉。也可以通过命令行 --mode 选项来重写
        // 'development'（serve）
        // 'production'（build）

        // publicDir：作为静态资源服务的文件夹。该目录中的文件在开发期间在 / 处提供，并在构建期间复制到 outDir 的根目录，并且始终按原样提供或复制而无需进行转换。该值可以是文件系统的绝对路径，也可以是相对于项目的根目录的相对路径。
        // 默认'public'
        publicDir: 'public',

        // assetsInclude：解析额外的定义内置type以外的静态导入资源
        // ['**/*.gltf']

        // envDir：用于加载 .env 文件的目录。可以是一个绝对路径，也可以是相对于项目根的路径
        // 默认：根路径

        css: {
            postcss: {
                plugins: [
                    pxtovw({
                        viewportWidth: 375, // 视窗的宽度，对应的是我们设计稿的宽度.
                        unitPrecision: 5, // 保留几位小数，指定`px`转换为视窗单位值的小数位数（很多时候无法整除）
                        //viewportHeight: 1080, // 视窗的高度，对应的是我们设计稿的高度.(也可以不配置)
                        viewportUnit: 'vw', // 指定需要转换成的视窗单位，建议使用vw
                        fontViewportUnit: 'vw', //字体使用的视口单位
                        //selectorBlackList: ['tab-bar', 'tab-bar-item', 'shopping-cart-bottom-bar'], // 指定不需要转换的类
                        minPixelValue: 1, // 小于或等于`1px`不转换为视窗单位.
                        mediaQuery: false, // 允许在媒体查询中转换`px`
                        // 忽略某些文件夹下的文件或特定文件，例如 'node_modules' 下的文件
                        // 如果值是一个正则表达式，那么匹配这个正则的文件会被忽略
                        // 如果传入的值是一个数组，那么数组里的值必须为正则
                        exclude: /(node_module)/,
                    }),
                ],
            },
            preprocessorOptions: {
                scss: {
                    /**如果引入多个文件，可以使用
                     * '@import "@/assets/scss/globalVariable1.scss";
                     * @import"@/assets/scss/globalVariable2.scss";'
                     **/
                    // additionalData: '@import "@/styles/index.scss";',
                    additionalData: '@use "@/styles/index.scss" as  *;',
                    api: 'modern-compiler',
                },
            },
        },
        resolve: {
            // 目录别名
            // 另一种方式
            // alias: [{
            // 	find: '@',  //字符串｜正则
            // 	replacement: path.resolve(__dirname, 'src')
            // }]
            alias: {
                '@': resolve(__dirname, 'src'),
            },
            // extensions导入时想要省略的扩展名列表。不建议忽略自定义导入类型的扩展名（例如：.vue），因为它会影响 IDE 和类型支持
            // 默认：['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json']
        },
        server: {
            // host：指定服务器应该监听哪个 IP 地址， 如果将此设置为 0.0.0.0 或者 true 将监听所有地址，包括局域网和公网地址
            // 默认：'127.0.0.1'
            // 命令设置：--host 0.0.0.0 或 --host
            host: '0.0.0.0',

            // port：指定开发服务器端口。注意：如果端口已经被使用，Vite 会自动尝试下一个可用的端口，所以这可能不是开发服务器最终监听的实际端口
            // 默认：3000
            port: 3045,

            // strictPort：设为true时若端口已被占用则会直接退出，而不是尝试下一个可用端口
            // 默认：false

            // open：在开发服务器启动时自动在浏览器中打开应用程序。
            // '/docs/index.html'
            // 设置打开的浏览器：设置环境变量 process.env.BROWSER='firefox'
            // 是否自动在浏览器打开
            open: false,
            // 是否开启 https

            // @ts-ignore
            // https: false,

            // 代理
            proxy: {
                // '/foo': 'http://localhost:4567',	字符串简写写法
                // '/api': { 以 ^ 开头，将会被解释为正则，如：'^/fallback/.*'
                // '/social': {
                // target: 'http://192.168.1.167:10025/', //史工
                // target: 'http://192.168.1.71:10025/', //吴工
                // 	changeOrigin: true,
                // 	// rewrite: path => path.replace(/^\/api/, '')
                // },
                '/cemetery/fhs/print/wechatPay': {
                    target: 'http://8.136.193.200/',
                    // target: 'http://8.136.193.200:15556/',
                    changeOrigin: true, //是否跨域
                    // rewrite: path => path.replace(/^\/api/, '')
                },
                // '/foo': 'http://localhost:4567',	字符串简写写法
                // '/api': { 以 ^ 开头，将会被解释为正则，如：'^/fallback/.*'
                '/bygex': {
                    target: 'http://8.136.193.200',
                    // target: 'http://60.191.72.66:10088',
                    changeOrigin: true, // 是否跨域
                    // rewrite: path => path.replace(/^\/api/, '')
                },
                '/cemetery': {
                    target: 'http://8.136.193.200',
                    // target: 'http://60.191.72.66:10088/',
                    changeOrigin: true, // 是否跨域
                    // rewrite: path => path.replace(/^\/api/, '')
                },
                '/business': {
                    target: 'http://8.136.193.200:8888',
                    changeOrigin: true, //是否跨域
                    // rewrite: path => path.replace(/^\/api/, '')
                },
                '/sns': {
                    target: 'https://api.weixin.qq.com/',
                    changeOrigin: true, //是否跨域
                    // rewrite: path => path.replace(/^\/api/, '')
                },
                '/cgi-bin': {
                    target: 'https://api.weixin.qq.com/',
                    changeOrigin: true, //是否跨域
                    // rewrite: path => path.replace(/^\/api/, '')
                },
                '/v3': {
                    target: 'https://api.mch.weixin.qq.com',
                    changeOrigin: true, //是否跨域
                    // rewrite: path => path.replace(/^\/api/, '')
                },
                '/api': {
                    target: 'http://8.136.193.200',
                    changeOrigin: true, //是否跨域
                    // rewrite: path => path.replace(/^\/api/, '')
                },
            },
        },

        build: {
            // target：设置最终构建的浏览器兼容目标
            // 默认：'modules'	指支持原生 ES 模块的浏览器。

            // outDir：指定输出路径（相对于 项目根目录).
            // 	默认：dist
            outDir: 'dist',
            // assetsDir：指定生成静态资源的存放路径（相对于 build.outDir）
            // 	默认：assets
            assetsDir: 'assets',

            // assetsInlineLimit：小于此阈值的导入或引用资源将内联为 base64 编码，以避免额外的 http 请求。
            // 默认：4096 (4kb)
            // 设置为 0 可以完全禁用此项。

            // sourcemap：构建后是否生成 source map 文件
            // 默认：false
            // true：创建一个独立的 source map 文件
            // 'inline'：source map 将作为一个 data URI 附加在输出文件中
            // 'hidden'：与 'true' 相似，只是 bundle 文件中相应的注释将不被保留
        },
        preview: {
            // host：为开发服务器指定 ip 地址，默认取server.host
            // 	0.0.0.0 或 true：监听所有地址，包括局域网和公共地址。
            // 	通过命令：--host 0.0.0.0 或 --host
            // port：指定开发服务器端口
            // 	默认：4173
            // strictPort：默认取server.strictPort
            // https：默认取server.https
            // open：默认取server.openy
            // proxy：默认取server.proxy
            // cors：默认取server.cors
        },
    };
});
